﻿using System.Globalization;
using Caliburn.Micro;
using WPCloudPT.Eventos;
using WPCloudPT.Model;
using WPCloudPT.Utils;

namespace WPCloudPT.ViewModels
{

    /// <summary>
    /// classe para ligar a view informacao utilizador
    /// </summary>
    public class InfoUserViewModel : Screen, IHandle<EventoUtilizador>
    {

        #region ClassVars
        /// <summary>
        /// variaveis da classe aqui
        /// </summary>
        private static readonly Utilities TmpUtils = Utilities.GetInstance();
        #endregion


        #region Propriedades

        /// <summary>
        /// propriedades da view e view model para o binding
        /// </summary>
        private Utilizador _tmpUser;
        public Utilizador TmpUser
        {
            get { return _tmpUser; }
            set
            {
                _tmpUser = value;
                NotifyOfPropertyChange(() => TmpUser);
            }
        }

        private string _txtNomeUser;
        public string TxtNomeUser
        {
            get { return _txtNomeUser; }
            set
            {
                if (value == _txtNomeUser) return;
                _txtNomeUser = value;
                NotifyOfPropertyChange(() => TxtNomeUser);
            }
        }

        private string _txtMailUtilizador;
        public string TxtMailUser
        {
            get { return _txtMailUtilizador; }
            set
            {
                if (value == _txtMailUtilizador) return;
                _txtMailUtilizador = value;
                NotifyOfPropertyChange(() => TxtMailUser);
            }
        }

        private string _txtUtilizadorQuota;
        public string TxtUtilizadorQuota
        {
            get { return _txtUtilizadorQuota; }
            set
            {
                if (value == _txtUtilizadorQuota) return;
                _txtUtilizadorQuota = value;
                NotifyOfPropertyChange(() => TxtUtilizadorQuota);
            }
        }

        private string _txtSharedQuota;
        public string TxtSharedQuota
        {
            get { return _txtSharedQuota; }
            set
            {
                if (value == _txtSharedQuota) return;
                _txtSharedQuota = value;
                NotifyOfPropertyChange(() => TxtSharedQuota);
            }
        }

        private string _txtUtilizadorUltimoAcesso;
        public string TxtUtilizadorUltimoAcesso
        {
            get { return _txtUtilizadorUltimoAcesso; }
            set
            {
                if (value == _txtUtilizadorUltimoAcesso) return;
                _txtUtilizadorUltimoAcesso = value;
                NotifyOfPropertyChange(() => TxtUtilizadorUltimoAcesso);
            }
        }
        #endregion

        #region Metodos
        /// <summary>
        /// metodos da framework e pelo utilizador
        /// </summary>
        /// <param name="view"></param>
        protected override void OnViewLoaded(object view)
        {
            EventAggregationProvider.Aggregator.Subscribe(this);
            _tmpUser = TmpUtils.TmpUser;
            base.OnViewLoaded(view);



            if (string.IsNullOrEmpty(_tmpUser.NomeUtilizador))
            {
                TmpUtils.DevolveDadosUtilizador(_tmpUser.OauthToken, _tmpUser.OauthTokenSecret);
            }
            else
            {
                TxtNomeUser = _tmpUser.NomeUtilizador;
                TxtMailUser = _tmpUser.MailUtilizador;
                TxtUtilizadorQuota = _tmpUser.DadosQuota.Quota.ToString(CultureInfo.InvariantCulture);
                TxtSharedQuota = _tmpUser.DadosQuota.QuotaPartilhada.ToString(CultureInfo.InvariantCulture);
                TxtUtilizadorUltimoAcesso = _tmpUser.UltimoAccessoUtilizador.ToString();
            }


        }


        protected override void OnDeactivate(bool close)
        {
            TmpUtils.TmpUser = _tmpUser;
            EventAggregationProvider.Aggregator.Unsubscribe(this);
            base.OnDeactivate(close);
        }
        #endregion

        #region HandlerEventos
        /// <summary>
        /// Handles the message.
        /// </summary>
        /// <param name="message">The message.</param>
        public void Handle(EventoUtilizador message)
        {
            if (message.EventoTipo != TipoEventoUtilizador.InfoUserOk) return;
            _tmpUser.IdUtilizador = message.TempUser.IdUtilizador;
            _tmpUser.MailUtilizador = message.TempUser.MailUtilizador;
            _tmpUser.NomeUtilizador = message.TempUser.NomeUtilizador;
            _tmpUser.UltimoAccessoUtilizador = message.TempUser.UltimoAccessoUtilizador;
            _tmpUser.UserActivo = message.TempUser.UserActivo;
            _tmpUser.DadosQuota= new InformacaoQuota
                                     {
                                         Quota = message.TempUser.DadosQuota.Quota,
                                         QuotaNormal = message.TempUser.DadosQuota.QuotaNormal,
                                         QuotaPartilhada = message.TempUser.DadosQuota.QuotaPartilhada

                                     };

            _tmpUser.DadosConvites = new ConvitesUtilizador
                                         {
                                             ConvitesQuotas = message.TempUser.DadosConvites.ConvitesQuotas,
                                             Enviados = message.TempUser.DadosConvites.Enviados
                                         };
            

            TxtNomeUser = _tmpUser.NomeUtilizador;
            TxtMailUser = _tmpUser.MailUtilizador;
            TxtUtilizadorQuota = _tmpUser.DadosQuota.Quota.ToString(CultureInfo.InvariantCulture);
            TxtSharedQuota = _tmpUser.DadosQuota.QuotaPartilhada.ToString(CultureInfo.InvariantCulture);
            TxtUtilizadorUltimoAcesso = _tmpUser.UltimoAccessoUtilizador.ToString();
        }
        #endregion
    }
}
